// 在一个 m*n 的棋盘的每一格都放有一个礼物，每个礼物都有一定的价值（价值大于 0）。
// 你可以从棋盘的左上角开始拿格子里的礼物，并每次向右或者向下移动一格、直到到达棋盘的右下角。
// 给定一个棋盘及其上面的礼物的价值，请计算你最多能拿到多少价值的礼物？
function dfsv(dp = [], nums = [], i, j) {
    // console.log(dp);
    if (i < 0 || j < 0) return 0;
    // debugger;
    // console.log(dp[i][j], i, j);
    if (dp[i][j] > 0) return dp[i][j]; // 表示已经取值了
    dp[i][j] = Math.max(dfsv(dp, nums, i - 1, j), dfsv(dp, nums, i, j - 1)) + nums[i][j];
    return dp[i][j];
}

function getMaxValue() {
    let nums = [
        [1, 3, 1],
        [1, 5, 1],
        [4, 2, 1]
    ];
    let dp = (new Array(nums.length)).fill(0).map(ar => new Array(nums[0].length).fill(0));
    // console.log(dp);
    dfsv(dp, nums, nums.length - 1, nums[0].length - 1);
}

getMaxValue();